home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
U-Utilities
/
(c)u1.d64
/
b-monitor.c
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
5KB
|
154 lines
0 PRINT"[147] BASIC MONITOR"
1 PRINT"CODED FOR COMMODORE 64 BY"
2 PRINT" W. MURRAY STROME"
3 PRINT " SPACES IGNORED IN DISSASSEMBLY"
4 PRINT" 'D' FOR DISASSEMBLE "
5 PRINT" 'A' FOR ASSEMBLE"
6 PRINT" 'Q' TO EXIT PROGRAM"
8 PRINT" 'END' STOPS ASSEMBLY"
10 PRINT" PRESS SPACE BAR TO STOP"
11 PRINT" DISASSEMBLY"
13 PRINT""
14 PRINT" START OF ASSEMBLY ADDRESS"
15 PRINT" MUST BE A FOUR DIGIT NUMBER"
16 PRINT" IN HEXADECIMAL"
17 PRINT" USE DEVICE #3 FOR SCREEN,"
18 PRINT" #4 FOR PRINTER"
20 (null) TO 2000
100 L=L/4096:FOR J=1 TO 4:L%=L:PRINTCHR$(48+L%-(L%>9)*7);:L=16*(L-L%)
150 NEXT:RETURN
200 L=L/16:FOR J=1 TO 2:L%=L:PRINTCHR$(48+L%-(L%>9)*7);:L=16*(L-L%):NEXT:RETURN
300 L=0:FOR J= 1 TO 4:L%=ASC(MID$(L$,J)):L=16*L+L%-48+(L%>64)*7:NEXT:RETURN
350 L=0:FOR J=1 TO 2 :L%=ASC(MID$(L$,J)):L=16*L+L%-48+(L%>64)*7:NEXT:RETURN
400 FOR K=2 TO 1 STEP -1:L=PEEK(CA+K):GOSUB 200:NEXT:RETURN
500 L=PEEK(CA+1):GOSUB 200: RETURN
600 PRINT"(";:GOSUB 400: PRINT")";:RETURN: REM INDIRECT JUMP
610 GOSUB 500:PRINT",Y";:RETURN:REM ZERO PAGE, INDEXED BY Y REGISTER
620 PRINT"(";:GOSUB 500: PRINT",X)";:RETURN: REM INDEXED INDIRECT (ZERO PAGE,X)
630 PRINT"(";:GOSUB 500:PRINT",Y)";:RETURN: REM INDIRECT INDEXED (ZERO PAGE,Y)
640 L=PEEK(CA+1): IF L>127 THEN L=L-256
642 L=CA+2+L:GOSUB 100:PRINT;:RETURN:REM RELATIVE BRANCH
650 GOSUB 400: PRINT",Y";:RETURN:REM ABSOLUTE, INDEXED BY Y REGISTER
660 PRINT"#";: GOSUB 500:PRINT;:RETURN: REM IMMEDIATE
670 GOSUB 400: PRINT",X";:RETURN: REM ABSOLUTE, INDEXED BY X REGISTER
680 GOSUB 500: PRINT",X";:RETURN: REM ZERO PAGE, INDEXED BY X REGISTER
690 GOSUB 500: PRINT;:RETURN: REM ZERO PAGE
700 GOSUB 400: PRINT;:RETURN: REM ABSOLUTE
710 PRINT;:RETURN: REM IMPLIED AND ACCUMULATOR
800 REM ASSEMBLER ROUTINES
805 IF L=3 THEN M=11:RETURN: REM IMPLIED
810 IF L=5 THEN M= 9:RETURN: REM ZERO PAGE
815 IF L=6 THEN M= 6:RETURN: REM IMMEDIATE
820 L$=MID$(AS$,7,1)
825 IF L$="X" THEN M=8:RETURN: REM ZERO PAGE,X
830 IF L$="Y" THEN M=1:RETURN: REM ZERO PAGE,Y
835 IF L$="," THEN M=2:RETURN: REM INDIRECT,X
840 IF L$=")" THEN M=3:RETURN: REM INDIRECT,Y
845 L$=RIGHT$(AS$,1)
850 IF L$="X" AND L=10 THEN M=7: RETURN: REM ABSOLUTE,X
855 IF L$="Y" AND L=10 THEN M=5:RETURN: REM ABSOLUTE,Y
860 IF L$=")" AND L=10 THEN M=0:RETURN: REM ABSOLUTE INDIRECT
865 IF LEFT$(AS$,1)="B" AND MID$(AS$,2,1)<>"I" THEN M=4:RETURN: REM BRANCH
870 IF L=7 THEN M=10:RETURN: REM ABSOLUTE
875 PRINT"MODE ?":M=12:RETURN: REM CATCH ALL OTHER INCORRECT ENTRIES
900 P=5:L=4:GOSUB 960: RETURN
905 P=4:L=2:GOTO 960
910 P=5:L=2:GOTO 960
915 P=5:L=2:GOTO 960
920 P=4:L=4:GOSUB 960:GOSUB 300
921 L=L-CA-2: IF L>127 OR L<-128 THEN PRINT "BRANCH?":M=12:RETURN
922 IF L<0 THEN L=L+256
923 RETURN
925 P=4:L=4:GOTO 960
930 P=5:L=2:GOTO 960
935 P=4:L=4:GOTO 960
940 P=4:L=2:GOTO 960
945 P=4:L=2:GOTO 960
950 P=4:L=4:GOTO 960
960 L$=MID$(AS$,P,L): RETURN
2000 DIM OP$(255),M%(255):SP$=" "
2010 FOR J=0 TO 150: REM TOTOAL OF 151 DIFFERENT OPCODE/MODE COMBINATIONS
2020 READ OP,OP$(OP),M%(OP)
2030 NEXT J
2500 L$="":POKE198,0:INPUT "ASSEMBLE OR DISSAMBLE";L$
2510 IF L$="A" GOTO 4000
2512 IF L$="Q" THEN END: REM QUIT
2513 IFL$<>"D" THEN GOTO 2500
3000 INPUT "DISASSEMBLE FROM";L$
3005 GOSUB 300: CA=L
3006 INPUT"DISASSEMBLE TO";L$
3007 GOSUB 300:CE=L
3008 INPUT"DEVICE#";N
3009 OPEN N,N:CMD N,
3010 L=CA: PRINT L;LEFT$(SP$,7-LEN(STR$(L)));: GOSUB 100
3015 P=PEEK(CA):M=M%(P)
3020 IF OP$(P)<>"" THEN 3025
3022 L=P:PRINT" ";:GOSUB 200: PRINT" ???";:NB=1:GOTO3065
3025 NB=2:IF M=0 OR M=5 OR M=7 OR M=10 THEN NB=3
3030 IF M=11 THEN NB=1
3035 PRINT" ";
3040 FOR K=0 TO NB-1
3045 L=PEEK(CA+K): GOSUB 200: PRINT" ";
3050 NEXT K
3055 FOR J=NB TO 3:PRINT" ";:NEXT:PRINT OP$(P);" ";
3060 ON M+1 GOSUB 600,610,620,630,640,650,660,670,680,690,700,710
3065 CA=CA+NB
3066 CLOSE N
3067 IF CA>CE THEN 3075
3070 GET L$:IF L$<>" " THEN GOTO 3009
3075 OPENN,N:CMDN:PRINT#N:CLOSEN:GOTO 2500
3078 END
4000 INPUT "ASSEMBLE FROM";L$
4005 GOSUB 300: CA=L
4010 L=CA:PRINT L,TAB(7);:GOSUB 100
4015 POKE631,34:POKE198,1:INPUT" ";X$:GOSUB5500
4020 IF AS$="END" GOTO 2500
4025 CO$=LEFT$(AS$,3)
4030 GOSUB 800: IF M=12 THEN 4010
4035 J=0
4040 IF CO$=OP$(J)AND M=M%(J) THEN 4050
4042 J=J+1:IF J<256 THEN GOTO 4040
4045 PRINT"OPCODE?":GOTO 4010
4050 NB=2:IF M=0 OR M=5 OR M=7 OR M=10 THEN NB=3
4055 IF M=11 THEN NB=1
4060 POKE CA,J: REM POKE OPCODE INTO MEMORY
4065 IF NB=1 THEN GOTO 4900
4070 IF M=4 THEN GOSUB 920:IF M=12 THEN GOTO 4010
4075 IF M=4 THEN POKE CA+1,L:GOTO 4900
4080 ON M+1 GOSUB 900,905,910,915,920,925,930,935,940,945,950
4085 IF NB=2 THEN GOSUB 350:POKECA+1,L:REM ONE ADDRESS BYTE ONLY; TWO:-
4090 IF NB=3 THEN GOSUB300:POKE CA+1,L-INT(L/256)*256:POKE CA+2,L/256
4900 CA=CA+NB:GOTO4010
5000 DATA 0,BRK,11,1,ORA,2,5,ORA,9,6,ASL,9,8,PHP,11,9,ORA,6,10,ASL,11
5010 DATA 13,ORA,10,14,ASL,10,16,BPL,4,17,ORA,3,21,ORA,8,22,ASL,8,24,CLC,11
5020 DATA 25,ORA,5,29,ORA,7,30,ASL,7,32,JSR,10,33,AND,2,36,BIT,9,37,AND,9
5030 DATA 38,ROL,9,40,PLP,11,41,AND,6,42,ROL,11,44,BIT,10,45,AND,10
5040 DATA 46,ROL,10,48,BMI,4,49,AND,3,53,AND,8,54,ROL,8,56,SEC,11,57,AND,5
5050 DATA 61,AND,7,62,ROL,7,64,RTI,11,65,EOR,2,69,EOR,9,70,LSR,9,72,PHA,11
5060 DATA 73,EOR,6,74,LSR,11,76,JMP,10,77,EOR,10,78,LSR,10,80,BVC,4
5070 DATA 81,EOR,3,85,EOR,8,86,LSR,8,88,CLI,11,89,EOR,5,93,EOR,7
5080 DATA 94,LSR,7,96,RTS,11,97,ADC,2,101,ADC,9,102,ROR,9,104,PLA,11
5090 DATA 105,ADC,6,106,ROR,11,108,JMP,0,109,ADC,10,110,ROR,10
5100 DATA 112,BVS,4,113,ADC,3,117,ADC,8,118,ROR,8,120,SEI,11,121,ADC,5
5110 DATA 125,ADC,7,126,ROR,7,129,STA,2,132,STY,9,133,STA,9,134,STX,9
5120 DATA 136,DEY,11,138,TXA,11,140,STY,10,141,STA,10,142,STX,10,144,BCC,4
5130 DATA 145,STA,3,148,STY,8,149,STA,8,150,STX,1,152,TYA,11,153,STA,5
5140 DATA 154,TXS,11,157,STA,7,160,LDY,6,161,LDA,2
5150 DATA 162,LDX,6,164,LDY,9,165,LDA,9,166,LDX,9,168,TAY,11
5160 DATA 169,LDA,6,170,TAX,11,172,LDY,10,173,LDA,10,174,LDX,10
5170 DATA 176,BCS,4,177,LDA,3,180,LDY,8,181,LDA,8,182,LDX,3,184,CLV,11
5180 DATA 185,LDA,5,186,TSX,11,188,LDY,7,189,LDA,7,190,LDX,5,192,CPY,6
5190 DATA 193,CMP,2,196,CPY,9,197,CMP,9,198,DEC,9,200,INY,11,201,CMP,6
5200 DATA 202,DEX,11,204,CPY,10,205,CMP,10,206,DEC,10,208,BNE,4,209,CMP,3
5210 DATA 213,CMP,8,214,DEC,8,216,CLD,11,217,CMP,5,221,CMP,7,222,DEC,7
5220 DATA 224,CPX,6,225,SBC,2,228,CPX,9,229,SEC,9,230,INC,9,232,INX,11
5230 DATA 233,SBC,6,234,NOP,11,236,CPX,10,237,SBC,10,238,INC,10,240,BEQ,4
5240 DATA 241,SBC,3,245,SBC,8,246,INC,8,248,SED,11
5250 DATA 249,SBC,5,253,SBC,7,254,INC,7
5500 AS$=""
5510 FOR J=1 TO LEN(X$):Y$=MID$(X$,J,1)
5515 IF Y$<>"" AND Y$<>" " THEN AS$=AS$+Y$
5520 NEXT
5530 L=LEN(AS$)
5600 RETURN